package com.healthcloud.service;

import com.healthcloud.entity.PatientRecord.PatientInfoVo;
import com.healthcloud.entity.PpPatientBaseEntity;
import com.healthcloud.entity.PpPatientBaseVo;
import com.healthcloud.entity.bloodPressureExport;
import com.healthcloud.entity.bloodSugarExport;
import com.healthcloud.utils.PageParam;

import java.util.List;
import java.util.Map;

/**
 * 病人档案
 * 
 * @author yucl
 * @email yucailong1111@126.com
 * @date 2017-09-04 14:03:05
 */
public interface PpPatientBaseService {
	
	PpPatientBaseEntity queryObject(Integer id);
	
    List<PpPatientBaseVo> queryListVo(PpPatientBaseVo bean, PageParam pageParam);
	
	int queryTotalVo(PpPatientBaseVo bean);
	
	void save(PpPatientBaseEntity ppPatientBase);
	
	void update(PpPatientBaseEntity ppPatientBase);
	
	void delete(Integer id);
	
	void deleteBatch(Integer[] ids);

	PpPatientBaseEntity queryByIdcard(String idcard);

	PatientInfoVo searchByIdCard(String idCard);

	void add(PpPatientBaseEntity patient);

	/**
	 * 根据病人表判断人数
	 * @param ids
	 * @param types
	 * @return
	 */
    Integer countDiseasesByIds(String ids, String types, Integer age, Integer sex);

	/**
	 * 根据检测数据判断人数
	 * @param ids
	 * @param testItemCodes
	 * @param day
     * @return
	 */
	Integer countDiseasesByIdsTest(String ids, String testItemCodes, Integer day);

	/**
	 * 血压未达标总数：以最近一次测量的血压值为标准，大于等于135/85算未达标。135或85有一个指标达到就算未达标
	 */
	Integer countBpErrorNumByIdsTest(String hospIds);

	/**
	 * 根据医院id查找病人数量
	 * @param ids
	 * @return
	 */
    Integer totalByHospitalIds(String ids);

	/**
	 * 检测人数
	 * @param ids
	 * @param testItemCodes
	 * @return
	 */
	Integer coutByIdsTest(String ids, String testItemCodes);

	/**
	 * 按年龄统计人数
	 * @param testItemCodes
	 * @return
	 */
	Map countErrorAge(String ids, String testItemCodes);

	/**
	 * 新建病人档案
	 */
	void savePatient(PpPatientBaseEntity entity);

	void savePatientTemp(PpPatientBaseEntity entity);

	/**
	 * 获取病人最大id
	 * @return
	 */
	Integer getMaxId();

	/**
	 * 血糖未达标总数 2020-07-06 修改统计标准为：以最近一次测量的血糖值为标准，空腹大于等于7.0，餐后血糖大于等于10算未达标。
	 * @param ids
	 * @return
	 */
	Integer countBsErrorNum(String ids);

	List<String> listErrorBsIdCards(String hospIds, String testItemCode,Integer standardValue);

	/**
	 * 血糖测量总数
	 * @param ids
	 * @return
	 */
	Integer countBsNum(String ids);

	/**
	 * 修改血压信息
	 * @param entity
	 */
	void updateBpInfo(PpPatientBaseEntity entity);

	/**
	 * 根据身份证号、hospitalId，查询 pp_patient_base 患者表中是否已有记录
	 * @param idCard
	 * @param hospitalId
	 * @return
	 */
	int countByIdCardAndHospitalId(String idCard, Long hospitalId);

	/**
	 * 修改病人身份证号
	 * @param oldIdCard 修改前身份证号
	 * @param newIdCard 修改后身份证号
	 */
	void updateIdCard(String oldIdCard, String newIdCard);

	List<bloodPressureExport> querybloodPressureExport(PpPatientBaseVo entity);

	List<bloodSugarExport> querybloodSugarExport(PpPatientBaseVo entity);
}